﻿#ifndef QScrollLabel_H
#define QScrollLabel_H

#include <QToolButton>
#include <QLabel>
#include <QTimer>
#include <QFont>
#include <QList>
#include <QColor>

#include "QCommonWidgets_global.h"
QCOMMWIDGETS_BEGIN_NAMESPACE

typedef enum _tTextDirection{
    TEXT_DIRECTION_NONE,
    TEXT_DIRECTION_LEFT,
    TEXT_DIRECTION_UP,
}T_textDirection;

class QCOMMONWIDGETS_EXPORT QScrollLabel : public QLabel
{
    Q_OBJECT
public:
    /**
     * 初始化构造函数
     *
     * @param - in ft 显示文字字体
     * @param - in direction 文字移动方向
     * @param - in parent 窗口指针
     * @note -
     * @return -
     */
    QScrollLabel(QFont ft,QColor color = Qt::white, T_textDirection direction = TEXT_DIRECTION_UP, QWidget* parent = nullptr);
    /**
     * 设置显示的文本
     *
     * @param - in text 需要显示的文本
     * @param - in timerDelay 滚动间隔时间（毫秒）
     * @param - in rate 滚动步进间隔时间（毫秒）
     * @param - in count 循环显示次数 1次
     * @note -
     * @return -
     */
    void showScrollText(QString text, int timerDelay = 30*1000, int rate = 30,int count = 1);
    // 设置行间隔
    void setRowSpace(int space);
    // 设置绘制起始Y
    void setDrawStartY(int y);
    // 暂停
    void suspend();
    // 继续
    void proceed();
	//线程执行函数
	void MyConcurrent();
private:
    // 计算调整显示文本
    void calculationRowText();
signals:
	// 设置显示文本
	void showScrollTextMsg(QString text, int timerDelay, int rate,int count);
    // 暂停
    void suspendMsg();
    // 继续
    void proceedMsg();
private slots:
	// 设置显示文本
	void slotshowScrollText(QString text, int timerDelay, int rate,int count);
    // 暂停
    void slotSuspend();
    // 继续
    void slotProceed();

private:
    int stepWidth;      // 绘制步进
    int stepTime;       // 绘制频率
    int curIndex;       // 当前绘制位置
    QString showText;   // 绘制的文字
    QTimer *scrollTimer;// 绘制触发定时器


    T_textDirection m_direction; // 文字移动方向
    QFont           m_font;      // 绘制字体
    QList<QString>  m_showText; // 绘制的文字
    QRect           m_textRect; // 文字所占空间
    int             m_scrollCount;// 循环次数
    QColor          m_color;    //  文字颜色
    int             m_rowSpace; // 行间隔
    int				m_drawStartY;	// 绘制起始Y坐标


    int				m_timeIdRate; 		// 绘制速度定时器
    int				m_timeIdSpace; 		// 绘制间隔时间定时器
    int				m_timeIdcontinuity; // 连续启动屏蔽定时器
    int				m_drawTimerRat; 	// 绘制速度延时
    int				m_drawTimerSpace; 	// 绘制间隔时间
    bool			m_isCalculationSuccess; // 文件显示区域完成标志

private slots:
    void updateIndex();

protected:
    void paintEvent(QPaintEvent *event);
    void resizeEvent(QResizeEvent *event);
    void timerEvent(QTimerEvent* event);

};
QCOMMWIDGETS_END_NAMESPACE
#endif // MAINWINDOW_H
